﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework;

namespace PokeTD
{
    class MessageSystem
    {
        private double _displayTime;
        private double _fadeTime;
        private SpriteFont _font;

        private List<UIMessage> messages = new List<UIMessage>();

        /// <summary>
        /// Die Zeit, die eine Nachricht angezeigt wird, bevor sie ausgefadet wird. Die Gesamtanzeigezeit addiert sich aus DisplayTime und FadeTime.
        /// </summary>
        public double DisplayTime
        {
            get { return _displayTime; }
            set { _displayTime = value; }
        }

        /// <summary>
        /// Die Zeit, die eine Nachricht ausgeblendet wird. Die Gesamtanzeigezeit addiert sich aus DisplayTime und FadeTime.
        /// </summary>
        public double FadeTime
        {
            get { return _fadeTime; }
            set { _fadeTime = value; }
        }

        /// <summary>
        /// Die Schriftart der Nachrichten.
        /// </summary>
        public SpriteFont Font
        {
            get { return _font; }
            set { _font = value; }
        }

        /// <summary>
        /// Die Zeit, die eine Nachricht vom erscheinen bis zum kompletten Verschwinden benötigt.
        /// </summary>
        public double TotalDisplayTime
        {
            get { return _fadeTime + _displayTime; }
        }

        /// <summary>
        /// Konstruktor
        /// </summary>
        /// <param name="displayTime">Zeit, die die Nachricht angezeigt wird</param>
        /// <param name="fadeTime">Zeit, die die Nachricht ausgeblendet wird</param>
        /// <param name="font">Die Schriftart der Nachrichten</param>
        public MessageSystem(double displayTime, double fadeTime, SpriteFont font)
        {
            _displayTime = displayTime;
            _fadeTime = fadeTime;
            _font = font;
        }

        public void AddMessage(string Message, Color MessageColor) 
        {
            messages.Add(new UIMessage(Message, MessageColor, _displayTime, _fadeTime, _font));
        }

        public void Update(GameTime gt)
        {
            List<UIMessage> remove = new List<UIMessage>();

            foreach (UIMessage m in messages)
            {
                m.Update(gt);
                if (m.DisplayTime <= 0)
                    remove.Add(m);
            }
            foreach (UIMessage m in remove)
            {
                messages.Remove(m);
            }
        }

        public void Draw(SpriteBatch sb)
        {
            
            Vector2 Rootvec = new Vector2(320,400);

            for (int i = messages.Count - 1; i >= 0; i--)
            {
                messages[i].Draw(sb, Rootvec - (messages.Count - i) * new Vector2(0, 25));
            }
        }

        /// <summary>
        /// Löscht alle Elemente der Queque
        /// </summary>
        public void Clear()
        {
            messages.Clear();
        }
    }
}
